/*
   container/ring

   Ring 环形链表, 内在结构呈环状, 类似唱片机的转盘, 一根指针指向当前 Ring, 相邻元素彼此连接, 可无限顺序遍历, 可用作特定流程循环, 零值为 nil

   * 注 :

   ring.New(n int)*Ring   创建一个长度为 n 的 Ring 环形链表

   r.Next()*Ring 总是返回下一个Ring

   r.Prev()*Ring 总是返回前一个Ring

   r.Len()int  返回环形链表的长度

   r.Link(s *Ring)*Ring 连接两个元素, 如果之间有元素, 则被删除, 并返回新的 r 指针, 用于继续操作, 如果连接另一个 Ring 元素, 则另一个 Ring 被插入当前 Ring, 返回原 s 的后继元素

   r.Unlink(n int)*Ring  从 r.Next() 开始删除 n 个元素, 并返回被删除元素构成的 Ring

   r.Do(f func(interface{}))  对 Ring 的每个元素执行操作

*/

package main

import(
	"container/ring"
	"fmt"
)

func main()  {

	var r = ring.New(5)

	fmt.Println(r.Len())

	for i := 0; i < r.Len() ; i++ {
		r.Value = i
		r = r.Next()
	}

	printRing(r)

}

func printRing(r *ring.Ring)  {
	var i = 0
	for e := r.Next(); i < r.Len(); e = e.Next() {
		fmt.Println(e.Value)
		i++
	}
}
